<?php

class TipoRecurso {
	
	public function TipoRecurso() {
		
	}
	
	public static function inserir($tipo){
		if (TipoRecurso::validar($tipo)) {
			//Executando LOCK na tabela recursoTiposPadrao para resgatar o ID do tipo inserido
			$strQuery	=	"LOCK TABLES recursoTiposPadrao WRITE";
			
			if (!($conexao = BancoDados::conectaBD())) {
				return false;
			}
				
			if (!BancoDados::query($strQuery, $conexao)) {
				return false;
			}
			
			$strQuery	=	"INSERT INTO recursoTiposPadrao VALUES (default, '" . $tipo . "')";
			if(!BancoDados::query($strQuery, $conexao)){
				return false;
			}
			$idTipo	=	mysql_insert_id($conexao);
			
			BancoDados::desconectaBD($conexao);
			
			$strQuery	=	"UPDATE recursos SET idTipoPadrao = " . $idTipo . ", tipo = '" . $tipo . "' WHERE tipo REGEXP '" . codificaStringBusca(canonizar($tipo)) . "'";
			$strQuery	=	preg_replace('/ AND $/', ' ', $strQuery);
			if (!BancoDados::query($strQuery)) {
				return false;
			}
			return true;
		}
		else {
			return false;
		}
		
	}
	
	public static function excluir($idTipo) {
		$strQuery	=	"SELECT COUNT(*) AS qtdRecursos FROM recursos WHERE idTipoPadrao = " . $idTipo;
		if (!is_array($resultado = BancoDados::query($strQuery))){
			return false;
		}
		
		if ($resultado[0]['qtdRecursos'] > 0) {
			adicionaMensagem(texto('MENSAGEM_ERRO_EXCLUIR_TIPO_SENDO_UTILIZADO'), 'erro');
			return false;
		}
		$strQuery	=	"DELETE FROM recursoTiposPadrao WHERE idTipoPadrao = " . $idTipo;
		if (!BancoDados::query($strQuery)){
			return false;
		}
		
		return true;
	}
	
	public static function validar($tipo) {
		$valida	=	true;
		if (!validaAlfaNumerico($tipo, constant('__TAM_TIPO_RECURSO__')) && $tipo != '') {
			adicionaMensagem(texto('MENSAGEM_ERRO_VALIDACAO_TIPO_DE_RECURSO', array($tipo)));
			$valida	=	false;
		}
		return $valida;
	}
	
	public static function buscar($idUsuario = NULL, $idCurso = NULL, $padraoUsado = false, $padrao = true, $paginaAtual = NULL, $resultadosPagina = NULL, $ordenacaoAtual = NULL, $ordemAtual = NULL) {
		
		if ($idCurso != null)
			$strJoin	=	"LEFT JOIN recursosCursos ON recursos.idRecurso = recursosCursos.idRecurso AND idCurso = " . $idCurso . " ";
		else
			$strJoin	=	"";
		
		$queryUsuario	=	$idUsuario != null ? "idUsuario = " . $idUsuario . " AND " : "";
		$queryPadraoUsado =	$padraoUsado ? "" : "ISNULL(idTipoPadrao) AND ";
		
		$strQuery1	=	"SELECT DISTINCT null as idTipoPadrao, recursos.tipo, COUNT(*) as qtdRecursos FROM recursos " . $strJoin . "WHERE " . $queryPadraoUsado . $queryUsuario;
		$strQuery1	=	preg_replace('/WHERE $/', '', $strQuery1);
		$strQuery1	=	preg_replace('/AND $/', '', $strQuery1);
		$strQuery1 	.=	" GROUP BY tipo";
		
		$strQuery2	=	"SELECT recursoTiposPadrao.*, tabelaQtdRecursos.qtdRecursos FROM recursoTiposPadrao LEFT JOIN (SELECT recursoTiposPadrao.idTipoPadrao, COUNT(*) AS qtdRecursos FROM recursoTiposPadrao,recursos WHERE recursoTiposPadrao.idTipoPadrao = recursos.idTipoPadrao GROUP BY recursoTiposPadrao.idTipoPadrao) AS tabelaQtdRecursos ON recursoTiposPadrao.idTipoPadrao = tabelaQtdRecursos.idTipoPadrao";
		
		if (is_null($idUsuario) && is_null($idCurso))
			$strQuery	=	$strQuery2;
		else {
			if($padrao) {
				$strQuery	=	"SELECT * FROM (" . $strQuery1 . " UNION " . $strQuery2 . ") AS queryResultado";
			}
			else
				$strQuery	=	$strQuery1;
		}
		$strQueryCount	=	'SELECT COUNT(*) AS qtdResultados FROM (' . $strQuery . ') AS queryOriginal;';
			
		if ($resultadoCount = BancoDados::query($strQueryCount)) {
			foreach($resultadoCount as $resultado) {
				$qtdResultados	=	$resultado['qtdResultados'];
			}

			if ($qtdResultados > 0) {
				$paginaAtual	=	$paginaAtual == NULL	?	1 : $paginaAtual;
				$ordenacaoAtual	=	$ordenacaoAtual == NULL	?	'tipo' : $ordenacaoAtual;
				$ordemAtual		=	$ordemAtual == NULL		?	'ASC' : ($ordemAtual == 'desc' ? 'DESC' : 'ASC');
					
				$strQuery	.=	' ORDER BY ' . $ordenacaoAtual . ' ' . $ordemAtual;
					
				if ($resultadosPagina != NULL) {
					$qtdPaginas		=	ceil($qtdResultados / $resultadosPagina);
					$qtdPaginas		=	$qtdPaginas == 0 ? 1 : $qtdPaginas;

					$strQuery		.=	' LIMIT ' . $resultadosPagina . ' OFFSET ' . (($paginaAtual - 1) * $resultadosPagina);
				}
				else {
					$qtdPaginas	=	1;
				}
					
				$strQuery	.=	';';
				
				$resultado	=	BancoDados::query($strQuery);
					
				if (is_array($resultado)) {
					return array ('listaResultados' => $resultado, 'qtdResultadosTotal' => $qtdResultados, 'qtdPaginas' => $qtdPaginas);
				}
				else {
					return false;
				}
			}
			else {
				return array('listaResultados' => array(), 'qtdResultadosTotal' => 0, 'qtdPaginas' => 0);
			}
		}
		else {
			return false;
		}
	}
	
	public function buscarTipoPorId($idTipoRecurso) {
		$strQuery	=	"SELECT tipo FROM recursoTiposPadrao WHERE idTipoPadrao = " . $idTipoRecurso . ";";
		if (!is_array($resultado = BancoDados::query($strQuery))) {
			adicionaMensagem(texto('MENSAGEM_ERRO_BUSCAR_TIPO'), 'erro');
			return false;
		}
		return $resultado[0]['tipo'];
	}
}
?>